<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>


<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="robots" content="index,nofollow">


<title>Telepathy Wiki - System Overview</title>
<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="System%20Overview_files/common.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="screen" href="System%20Overview_files/screen.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="print" href="System%20Overview_files/print.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="projection" href="System%20Overview_files/projection.css">

<!-- css only for MSIE browsers -->
<!--[if IE]>
   <link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="/moin/freedesktop/css/msie.css">
<![endif]-->


<script type="text/javascript" src="System%20Overview_files/common.js"></script>



<script type="text/javascript">
<!--
var search_hint = "Search";
//-->
</script>


<link rel="Start" href="http://telepathy.freedesktop.org/wiki/FrontPage">
<link rel="Alternate" title="Wiki Markup" href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=raw">
<link rel="Alternate" media="print" title="Print View" href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=print">
<link rel="Search" href="http://telepathy.freedesktop.org/wiki/FindPage">
<link rel="Index" href="http://telepathy.freedesktop.org/wiki/TitleIndex">
<link rel="Glossary" href="http://telepathy.freedesktop.org/wiki/WordIndex">
<link rel="Help" href="http://telepathy.freedesktop.org/wiki/HelpOnFormatting">
</head><body dir="ltr" lang="en">


<ul id="username"><li><a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=login" id="login" rel="nofollow">Login</a></li></ul>
<div id="logo"><a href="http://telepathy.freedesktop.org/wiki/FrontPage">Telepathy Wiki</a></div>

<table id="navtable" align="center" border="0" cellpadding="0" cellspacing="0">
  <tbody><tr height="12">
    <td style="background-image: url(&quot;/png/ul.png&quot;); border: medium none;" width="12">
    </td>
    <td style="background-image: url(&quot;/png/t.png&quot;); background-repeat: repeat-x; border: medium none;">
    </td>
    <td style="background-image: url(&quot;/png/ur.png&quot;); border: medium none;" width="12">
    </td>
  </tr>
  <tr>
    <td style="background-image: url(&quot;/png/l.png&quot;); background-repeat: repeat-y; border: medium none;" width="12">
    </td>
    <td style="background-image: url(&quot;/png/bg.png&quot;); border: medium none;">
<a href="http://telepathy.freedesktop.org/wiki/RecentChanges"></a><a href="http://telepathy.freedesktop.org/wiki/RecentChanges">RecentChanges</a>
<a href="http://telepathy.freedesktop.org/wiki/FindPage"></a><a href="http://telepathy.freedesktop.org/wiki/FindPage">FindPage</a>
<a href="http://telepathy.freedesktop.org/wiki/HelpContents"></a><a href="http://telepathy.freedesktop.org/wiki/HelpContents">HelpContents</a>

    </td>
    <td style="background-image: url(&quot;/png/r.png&quot;); background-repeat: repeat-y; border: medium none;" width="12">
    </td>
  </tr>
  <tr style="font-size: 1pt;" height="12">
    <td style="border: medium none;" width="12"><img src="System%20Overview_files/ll.png"></td>
    <td style="background-image: url(&quot;/png/b.png&quot;); background-repeat: repeat-x; border: medium none;">
    </td>
    <td style="border: medium none;" width="12"><img src="System%20Overview_files/lr.png"></td>
  </tr>
</tbody></table>


<form id="searchform" method="get" action="/wiki/System%20Overview">
<div>
<input name="action" value="fullsearch" type="hidden">
<input name="context" value="180" type="hidden">
<label style="display: none;" for="searchinput">Search:</label>
<input class="disabled" id="searchinput" name="value" value="Search" size="20" onfocus="searchFocus(this)" onblur="searchBlur(this)" onkeyup="searchChange(this)" onchange="searchChange(this)" alt="Search" type="text">
<input disabled="disabled" id="titlesearch" name="titlesearch" value="Titles" alt="Search Titles" type="submit">
<input disabled="disabled" id="fullsearch" name="fullsearch" value="Text" alt="Search Full Text" type="submit">
</div>
</form>
<script type="text/javascript">
<!--// Initialize search form
var f = document.getElementById('searchform');
f.getElementsByTagName('label')[0].style.display = 'none';
var e = document.getElementById('searchinput');
searchChange(e);
searchBlur(e);
//-->
</script>

<div id="title"><h1>System Overview</h1></div>
<ul id="iconbar">
<li><a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=edit" rel="nofollow" title="Edit"><img alt="Edit" src="System%20Overview_files/moin-edit.png" title="Edit" height="12" width="12"></a></li>
<li><a href="http://telepathy.freedesktop.org/wiki/System%20Overview" rel="nofollow" title="View"><img alt="View" src="System%20Overview_files/moin-show.png" title="View" height="13" width="12"></a></li>
<li><a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=diff" rel="nofollow" title="Diffs"><img alt="Diffs" src="System%20Overview_files/moin-diff.png" title="Diffs" height="11" width="15"></a></li>
<li><a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=info" rel="nofollow" title="Info"><img alt="Info" src="System%20Overview_files/moin-info.png" title="Info" height="11" width="12"></a></li>
<li><a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=subscribe" rel="nofollow" title="Subscribe"><img alt="Subscribe" src="System%20Overview_files/moin-subscribe.png" title="Subscribe" height="10" width="14"></a></li>
<li><a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=raw" rel="nofollow" title="Raw"><img alt="Raw" src="System%20Overview_files/moin-raw.png" title="Raw" height="13" width="12"></a></li>
<li><a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=print" rel="nofollow" title="Print"><img alt="Print" src="System%20Overview_files/moin-print.png" title="Print" height="14" width="16"></a></li>
</ul>

<p style="clear: both;">


</p><div dir="ltr" id="content" lang="en"><span class="anchor" id="top"></span>
<span class="anchor" id="line-1"></span><p class="line867">
</p><h1 id="TelepathyFrameworkArchitecture">Telepathy Framework Architecture</h1>
<span class="anchor" id="line-2"></span><span class="anchor" id="line-3"></span><p class="line867"><em>Version 1.0</em> <span class="anchor" id="line-4"></span><span class="anchor" id="line-5"></span></p><p class="line867"><em><a href="http://telepathy.freedesktop.org/wiki/RobertMcQueen">RobertMcQueen</a>, Collabora Limited</em> <span class="anchor" id="line-6"></span><span class="anchor" id="line-7"></span></p><p class="line867"><em><a class="mailto" href="mailto:robert.mcqueen@collabora.co.uk">robert.mcqueen@collabora.co.uk</a></em> <span class="anchor" id="line-8"></span><span class="anchor" id="line-9"></span></p><p class="line874">The
 aim of the Telepathy system is to provide a D-Bus-based framework that 
unifies all forms of real time communication, including, but not limited
 to, instant messaging, IRC and voice and video over IP. It aims to 
provide a simple interface to client applications allowing them to 
quickly implement code to make use of real time communication over any 
supported protocol. <span class="anchor" id="line-10"></span><span class="anchor" id="line-11"></span></p><p class="line874">Benefits of this approach include: <span class="anchor" id="line-12"></span></p><ul><li>Breaking
 down previously complicated monolithic applications into simpler 
components which are concerned with only one group of functionality. <span class="anchor" id="line-13"></span></li><li>Providing
 a standard interface so that 3rd parties can provide connection 
backends for new protocols, or 3rd party UIs can easily make use of 
existing connections for IM and voice functions. <span class="anchor" id="line-14"></span></li><li>Components implementing certain functionality can be loaded on demand, and do not have to be kept in memory at all times. <span class="anchor" id="line-15"></span></li><li>Components
 are isolated from each other providing greater robustness against 
failure, and allowing separate security policies to be applied to each. <span class="anchor" id="line-16"></span><span class="anchor" id="line-17"></span></li></ul><p class="line867"><a class="http" href="http://mission-control.sourceforge.net/mission-control.png">Architecture of Telepathy Framework</a> shows the components of the overall system, and their interactions. <span class="anchor" id="line-18"></span><span class="anchor" id="line-19"></span></p><p class="line867">
</p><h2 id="ConnectionManagers">Connection Managers</h2>
<span class="anchor" id="line-20"></span><span class="anchor" id="line-21"></span><p class="line874">Connection
 managers are responsible for establishing connections to particular IM 
or VOIP servers. One connection manager may support for one or more 
protocols, and may support one or more connections, depending upon 
implementation. The connection managers are started using D-Bus service 
activation on a well-known bus name, and present a connection manager 
object to the bus. Method calls on this object can be used to request a 
connection, which is represented as another object. <span class="anchor" id="line-22"></span><span class="anchor" id="line-23"></span></p><p class="line874">The
 connection object provides simple status signals indicating whether or 
not it is currently connected to the server, or attempting to connect. 
Some connections may also provide additional interfaces such as the 
presence interface, which emits signals detailing the presence of 
contacts on the connection, and allows you to set your own presence, and
 the aliasing interface, which indicates that contacts have an alias 
which they can change via the server. <span class="anchor" id="line-24"></span><span class="anchor" id="line-25"></span></p><p class="line874">Most
 communication with the server and other contacts is carried out with 
instances of various channel types, and can also implement different 
interfaces to represent different functionality. The connection object 
has a method to request channels a given type that implement certain 
interfaces. <span class="anchor" id="line-26"></span><span class="anchor" id="line-27"></span></p><p class="line862">The following channel types are in the <a class="http" href="http://telepathy.freedesktop.org/spec.html">specification</a> at the moment: <span class="anchor" id="line-28"></span><span class="anchor" id="line-29"></span></p><p class="line867">
</p><h3 id="ListChannelType">List Channel Type</h3>
<span class="anchor" id="line-30"></span><span class="anchor" id="line-31"></span><p class="line874">Represents
 a list of people stored on the server, a list channel implements the 
named and group channel interfaces. The named channel interface gives a 
channel an immutable name, meaning it can be requested and identified by
 that name. The group channel interface provides lists of members in the
 channel, and those pending local and remote approval, provides methods 
for the user to request changes and emits signals as these change. Using
 both these interfaces, instances of the list channel type allow you to 
manage a list stored on the server. Well-known list channel names such 
as "subscribe", "publish" and "block" allow management of server-stored 
contact lists, people who can see your presence, and people who are not 
allowed to message you. <span class="anchor" id="line-32"></span><span class="anchor" id="line-33"></span></p><p class="line867">
</p><h3 id="TextChannelType">Text Channel Type</h3>
<span class="anchor" id="line-34"></span><span class="anchor" id="line-35"></span><p class="line874">A
 text channel provides methods to send messages, and has signals to 
indicate that messages have been sent and received. An instance of a 
text channel might implement the individual channel interface if it is 
for messaging a single individual, or may implement a combination of 
group channel interface and named channel interface if it is a 
multi-user chat room. Some protocols have no concept of an individual 
channel, so requesting one might result in a group channel being created
 with the requested contact. <span class="anchor" id="line-36"></span><span class="anchor" id="line-37"></span></p><p class="line867">
</p><h3 id="StreamedMediaChannel">Streamed Media Channel</h3>
<span class="anchor" id="line-38"></span><span class="anchor" id="line-39"></span><p class="line874">The
 streamed media channel is designed to pass contacts' SDP parameters 
from the protocol implementation in the connection manager to the media 
implementation in the particular client application. This allows the 
phone or video streaming implementation to be separated from the 
underlying protocol, allowing this process to be given real-time 
capabilities. These channels can also implement the group channel 
interface to handle multiple call participants. <span class="anchor" id="line-40"></span><span class="anchor" id="line-41"></span></p><p class="line867">
</p><h2 id="ClientLibrary">Client Library</h2>
<span class="anchor" id="line-42"></span><span class="anchor" id="line-43"></span><p class="line874">The
 client library will use the D-Bus glib wrappers to provide an intuitive
 API for making use of the objects provided by the connection managers. 
Most of the method calls in this API will merely invoke D-Bus methods on
 the underlying objects, but some utility code will be provided to make 
the API more convenient for application developers. There will also be 
code in the client library to parse files on disk to discover the 
available connection manager implementations, what protocols they 
support, and what connection parameters they support. This will allow a 
client to allow the user to configure accounts on various protocols 
without having to start any of the connection managers. <span class="anchor" id="line-44"></span><span class="anchor" id="line-45"></span><span class="anchor" id="line-46"></span></p><p class="line867">
</p><h2 id="MissionControl">Mission Control</h2>
<span class="anchor" id="line-47"></span><span class="anchor" id="line-48"></span><p class="line874">Mission
 control is the only part of the framework which must be persistently 
loaded. It performs a number of roles important in the user interacting 
with the framework, and implements the behaviour which is specific to 
the environment: <span class="anchor" id="line-49"></span><span class="anchor" id="line-50"></span></p><p class="line867">
</p><h3 id="Launchingconnectionmanagersandestablishingconnections">Launching connection managers and establishing connections</h3>
<span class="anchor" id="line-51"></span><p class="line874">When the 
user wishes to go on-line it can read the user's account details a the 
configuration store and launch the connection managers and log in to the
 user's IM/VOIP accounts when they wish to go on-line. If the user 
wanted to always log in to their messenger services when their system 
was on-line, it could listen to signals from network manager to do this.
 <span class="anchor" id="line-52"></span><span class="anchor" id="line-53"></span></p><p class="line867">
</p><h3 id="Managingtheuser.27spresencewhenon-line">Managing the user's presence when on-line</h3>
<span class="anchor" id="line-54"></span><p class="line874">The user 
interface which allows the user to manage their presence on VOIP and IM 
services are presented by mission control. When used they can make calls
 to Galago and set the presence on the objects which represent the user 
themselves, or in some cases (such as blocking voice calls only) may 
simply change how incoming channels are handled. <span class="anchor" id="line-55"></span><span class="anchor" id="line-56"></span></p><p class="line867">
</p><h3 id="Presentingtheappropriatehandlerfornewly-createdchannels">Presenting the appropriate handler for newly-created channels</h3>
<span class="anchor" id="line-57"></span><p class="line874">Mission 
control is responsible for ensuring that every channel of communication 
that is created by the connection objects has been presented to the user
 in the appropriate way. A program such as the contacts application 
which wants to initiate a chat with a contact will send the a channel 
request command to the connection object, and mission control might 
respond to the resulting new channel signal by launching the appropriate
 client application to present the chat to the user. <span class="anchor" id="line-58"></span><span class="anchor" id="line-59"></span></p><p class="line867">
</p><h3 id="Synchronisingtheaddressbookwithserver-storedlists">Synchronising the address book with server-stored lists</h3>
<span class="anchor" id="line-60"></span><p class="line874">For services
 which have server-stored "subscribe", "allow" or "deny" lists, mission 
control must update these lists based on changes made in the address 
book, both those which are made when their system is not logged into the
 service, and those which are made when the device is logged in. <span class="anchor" id="line-61"></span><span class="anchor" id="line-62"></span></p><p class="line867">
</p><h3 id="Promptingtheuseraboutpublishingtheirpresence">Prompting the user about publishing their presence</h3>
<span class="anchor" id="line-63"></span><p class="line874">For services
 that support managing who is able to view the presence of the user, 
mission control should watch for requests to join the "publish" list 
channel and ask the user if they wish to allow or deny the contact's 
request to monitor their presence. <span class="anchor" id="line-64"></span><span class="anchor" id="line-65"></span></p><p class="line867">
</p><h2 id="StreamingEngine.28neevoip-engine.29">Streaming Engine (nee voip-engine)</h2>
<span class="anchor" id="line-66"></span><span class="anchor" id="line-67"></span><p class="line862">The
 streaming engine is the background task which implements the handler 
for the streamed media channel. It interacts with the same streamed 
media channel object that the phone UI does for a particular call, and 
handles creating media session and streams for this call. It uses <a class="http" href="http://farsight.freedesktop.org/wiki/">Farsight</a>
 to enumerate appropriate codecs and streaming elements to connect the 
incoming and outcoming streams between the hardware and each participant
 in the call. The phone UI can use the group channel interface on the 
same channel to invite people to the call (by adding them to the 
channel), put the call on hold, and transfer members to another channel.
 <span class="anchor" id="line-68"></span><span class="anchor" id="bottom"></span></p></div><div id="pagebottom"></div>



<div id="footer">
<p id="pageinfo" class="info" dir="ltr" lang="en">telepathy: System Overview  (last edited 2008-12-05 15:23:07 by <span title="pierlux @ modemcable106.102-201-24.mc.videotron.ca[24.201.102.106]"><a class="nonexistent" href="http://telepathy.freedesktop.org/wiki/PierreLucBeaudoin" title="pierlux @ modemcable106.102-201-24.mc.videotron.ca[24.201.102.106]">PierreLucBeaudoin</a></span>)</p>

<ul class="editbar"><li><span class="disabled">Immutable Page</span></li></ul><p><a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=refresh" rel="nofollow">DeleteCache</a> (cached 2010-11-02 01:01:49)</p><p>Or try one of these actions: <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=AttachFile" rel="nofollow">AttachFile</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=Despam" rel="nofollow">Despam</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=LikePages" rel="nofollow">LikePages</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=Load" rel="nofollow">Load</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=LocalSiteMap" rel="nofollow">LocalSiteMap</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=PackagePages" rel="nofollow">PackagePages</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=RenderAsDocbook" rel="nofollow">RenderAsDocbook</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=Save" rel="nofollow">Save</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=SpellCheck" rel="nofollow">SpellCheck</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=SubscribeUser" rel="nofollow">SubscribeUser</a>, <a href="http://telepathy.freedesktop.org/wiki/System%20Overview?action=SyncPages" rel="nofollow">SyncPages</a></p>

</div>
<ul id="credits">
<li><a href="http://moinmo.in/" title="This site uses the MoinMoin Wiki software.">MoinMoin Powered</a></li><li><a href="http://moinmo.in/Python" title="MoinMoin is written in Python.">Python Powered</a></li><li><a href="http://moinmo.in/GPL" title="MoinMoin is GPL licensed.">GPL licensed</a></li><li><a href="http://validator.w3.org/check?uri=referer" title="Click here to validate this page.">Valid HTML 4.01</a></li>
</ul>


</body></html>